package com.trkj.popj;

import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.NonNull;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.util.Date;
@Slf4j
@Data
@NoArgsConstructor
@RequiredArgsConstructor
@Component
public class DeptVo {
    @NonNull
    private int deptno;
    @NonNull
    private String dname;
    private String loc;
    private Date createDate;
    private boolean isOk;
    @NonNull
    @Autowired
    //@Qualifier("empVo")//如果在定义EmpVo时使用了@Component("emp"),这个注释就必须要用上
    //这里如果使用@Qualifier指定子类的名字也是可以的
    private EmpVo empVo;
    //@Autowired//启用这个会报错
    //启用这个会报错，因为@Autowired优先类型，再找名字
    //ManagerVo与SalesManVo都是Emp的子类型，而EmpVo处
    // 仅仅使用@Component注解，而没给名字，所以这时容器
    //不知道采用哪一个类型，而且名字也找不到，所以会报错
    //除非在EmpVo处使用@Component("emp"),但上面empVo
    //属性名就需要加上@Qualifier("emp")
    private EmpVo emp;
    @Resource//优先名字装配
    private ManagerVo managerVo;
    @Resource//找不到名字时再找类型
    private SalesManVo salesMan;
    //@Resource//找不到名字，也找不到匹配的类型（有3个EmpVo类型），所以报错
    @Resource(name = "empVo")//这里指定子类的名字也是可以的
    private EmpVo evo;
    //@Resource(type = com.trkj.pojo.ManagerVo.class)//通过指定类型直接找匹配
    @Resource(type = com.trkj.popj.ManagerVo.class,name = "managerVo")//需要同时匹配
    //@Resource(type = com.trkj.pojo.EmpVo.class)//报错
    private ManagerVo mv;
}
